Chuyển tới nội dung chính

std::string::operator[]

#include <string>

// Phiên bản non-const:
charT& operator[] (size_type pos);

// Phiên bản const:
const charT& operator[] (size_type pos) const;

Truy cập đến ký tự tại một vị trí (index) cụ thể trong chuỗi.

Tham số

pos

  • Chỉ số (index) của ký tự cần truy cập (bắt đầu từ 0). Kiểu dữ liệu là size_type, thường là std::size_t.

Giá trị trả về

  • Phiên bản non-const: Tham chiếu (charT&) đến ký tự tại vị trí pos.
  • Phiên bản const: Tham chiếu hằng (const charT&) đến ký tự tại vị trí pos.

Đặc điểm

  1. Toán tử [] không kiểm tra phạm vi. Nếu bạn truy cập vào một vị trí nằm ngoài phạm vi hợp lệ của chuỗi (nhỏ hơn 0 hoặc lớn hơn hoặc bằng size()), chương trình của bạn có thể bị lỗi hoặc hoạt động sai.
  2. Để truy cập an toàn hơn, hãy sử dụng phương thức at(), phương thức này sẽ ném ra ngoại lệ std::out_of_range nếu bạn truy cập ngoài phạm vi.
  3. Toán tử [] trả về tham chiếu đến ký tự, cho phép bạn thay đổi giá trị của ký tự đó (nếu là phiên bản non-const).
  4. Giống như mảng trong C/C++, chỉ số (index) của chuỗi bắt đầu từ 0. Nghĩa là, ký tự đầu tiên có chỉ số là 0, ký tự thứ hai có chỉ số là 1, và cứ tiếp tục như vậy.
  5. Toán tử [] có hai phiên bản:
    • Phiên bản non-const trả về tham chiếu đến ký tự tại vị trí đã cho, cho phép thay đổi giá trị của ký tự đó.
    • Phiên bản const trả về tham chiếu hằng đến ký tự, không cho phép thay đổi giá trị.
  6. Toán tử [] không kiểm tra xem chỉ số có nằm trong phạm vi hợp lệ của chuỗi hay không. Truy cập ngoài phạm vi sẽ dẫn đến hành vi không xác định (undefined behavior), có thể gây ra lỗi hoặc làm chương trình chạy sai.
  7. Nên sử dụng at() để thay thế vì at() có kiểm tra và sẽ throw exception nếu index vượt quá giới hạn của chuỗi.
  8. Toán tử [] thường được sử dụng để:
    • Truy cập và đọc giá trị của các ký tự riêng lẻ trong chuỗi.
    • Thay đổi giá trị của các ký tự riêng lẻ trong chuỗi (chỉ với phiên bản non-const).
    • Sử dụng trong các vòng lặp để duyệt qua các ký tự của chuỗi.

Ví dụ

#include <iostream>
#include <string>

int main() {
std::string str = "Hello, world!";

// Truy cập ký tự sử dụng toán tử []
char firstChar = str[0]; // firstChar = 'H'
char lastChar = str[str.size() - 1]; // lastChar = '!'

std::cout << "First character: " << firstChar << std::endl;
std::cout << "Last character: " << lastChar << std::endl;

// Thay đổi ký tự sử dụng toán tử [] (phiên bản non-const)
str[0] = 'h';
str[7] = 'W';

std::cout << "Modified string: " << str << std::endl;

// Duyệt qua chuỗi sử dụng toán tử []
for (std::string::size_type i = 0; i < str.size(); ++i) {
std::cout << str[i] << " ";
}
std::cout << std::endl;

return 0;
}

Các hàm liên quan

atTruy cập đến ký tự tại một vị trí cụ thể trong chuỗi, có kiểm tra phạm vi
substrTrích xuất một chuỗi con từ một chuỗi std::string hiện có
findTìm kiếm sự xuất hiện đầu tiên của một chuỗi con, một ký tự, hoặc một chuỗi ký tự C-style bên trong một chuỗi std::string
replaceThay thế một phần của chuỗi bằng một nội dung mới